package com.sykj.bsc.rwl.verification;
/**
 * 
 * @ClassName:  VerificationCode   
 *@Description: 验证码
 * @author 任文龙
 ** @date:   2018年8月5日 下午12:28:15
 */

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;

public class VerificationCode {
	
	public static BufferedImage getVerifcationCode(String data) {
		int width=100;
		int height=28;
		//生成一张图片  王素雅呀呀呀sasas
		BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		//获取画笔
		Graphics2D graphics2d=img.createGraphics();
		//给图片设置背景颜色
		graphics2d.setColor(getColor(200, 250));
		//画板 和画笔都有了 该有验证码的文字内容了；第一个param是设置字体的样式，第二个param是设置字体的粗细,第三个param设置字体的大小
		Font font=new Font("楷体", Font.BOLD, 25);
		graphics2d.setFont(font);
		
		graphics2d.setColor(getColor(20, 130));
		//画个矩形 第一个param是x轴 第二个param是y轴 第三个param是宽度，第4个param是高度
		graphics2d.fillRect(0, 0, width, height);
		//干扰线 由起始点和结束点组成一条线条 线段的长短用随机数来设置 
				Random r=new Random();
				for(int i=0;i<20;i++) {
					//设置线段的颜色
					graphics2d.setColor(getColor(130, 200));
					//起点
					int x1=r.nextInt(100);
					int y1=r.nextInt(25);
					//终点
					int x2=r.nextInt(50);
					int y2=r.nextInt(27);
					graphics2d.drawLine(x1, y1, x2, y2);
				}
				//生成噪点
				//噪点率
				float lv=0.01f;
				//噪点
				int zdlv=(int) (lv*width*height);
				for(int k=0;k<50;k++) {
					int x=r.nextInt(width);
					int y=r.nextInt(height);
					img.setRGB(x, y, r.nextInt(255));
				}
		//第一个参数是要验证码的内容，第二个param是x轴起始点，第三个param是y轴   就是字体的位置
				graphics2d.drawString(data, 20, 25);
		//关闭
				graphics2d.dispose();
		return img;
	}
	
	/**
	 * 
	*@Title:getColor
	*@Description:返回一个RGB组成的颜色
	@param from(随机数的一个起点)
	@param to(随机数的一个重点)
	@return 
	*
	 */
	//分析为了让图片的背景色不和字体的背景色重复
	public  static Color getColor(int from,int to) {
		Random random=new Random();
		int r=from+random.nextInt(to-from);
		int g=from+random.nextInt(to-from);
		int b=from+random.nextInt(to-from);
		return new Color(r,g,b);
	}
}	
